import Cookie from 'js-cookie'

// 401拦截
const resp401 = {
    /**
     * 响应数据之前做点什么
     * @param response 响应对象
     * @param options 应用配置 包含: {router, i18n, store, message}
     * @returns {*}
     */
    onFulfilled(response, options) {
        const {message} = options
        if (response !== undefined && response.code === 401) {
            message.error('无此权限')
        }
        return response
    },
    /**
     * 响应出错时执行
     * @param error 错误对象
     * @param options 应用配置 包含: {router, i18n, store, message}
     * @returns {Promise<never>}
     */
    onRejected(error, options) {
        const {message} = options
        const {response} = error
        if (response !== undefined && response.status === 401) {
            message.error('无此权限')
        }
        return Promise.reject(error)
    }
}

const resp403 = {
    onFulfilled(response, options) {
        const {message} = options
        if (response !== undefined && response.code === 403) {
            message.error('请求被拒绝')
        }
        return response
    },
    onRejected(error, options) {
        const {message} = options
        const {response} = error

        if (response === undefined) {
            // 配置的后台连接不上，直接跳转到登录界面
            // 以下方式直接跳转
            // window.location.href='index.html';

            return Promise.reject(error);
        }

        if (response.status === 403) {
            message.error('请求被拒绝')
        }
        return Promise.reject(error)
    }
}

const reqCommon = {
    /**
     * 发送请求之前做些什么
     * @param config axios config
     * @param options 应用配置 包含: {router, i18n, store, message}
     * @returns {*}
     */
    onFulfilled(config) {
        // const {message} = options
        const {url, xsrfCookieName} = config
        if (url.indexOf('login') === -1 && xsrfCookieName && !Cookie.get(xsrfCookieName)) {
            // message.warning('认证 token 已过期，请重新登录')
        }
        return config
    },
    /**
     * 请求出错时做点什么
     * @param error 错误对象
     * @param options 应用配置 包含: {router, i18n, store, message}
     * @returns {Promise<never>}
     */
    onRejected(error, options) {
        const {message} = options
        message.error(error.message)
        return Promise.reject(error)
    }
}

export default {
    request: [reqCommon], // 请求拦截
    response: [resp401, resp403] // 响应拦截
}
